home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / gfx / 3d / irit50src.lha / irit5 / include / symb_lib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-02  |  14.3 KB  |  363 lines

  1. /******************************************************************************
  2. * Symb_lib.h - header file for the SYMBolic library.                  *
  3. * This header is also the interface header to the world.              *
  4. * This library is closely related to symb_lib and should be linked with it.   *
  5. *******************************************************************************
  6. * Written by Gershon Elber, Mar. 90.                          *
  7. ******************************************************************************/
  8.  
  9. #ifndef SYMB_LIB_H
  10. #define SYMB_LIB_H
  11.  
  12. #include <stdio.h>
  13. #include "irit_sm.h"
  14. #include "cagd_lib.h"
  15.  
  16. typedef enum {
  17.     SYMB_ERR_WRONG_SRF,
  18.     SYMB_ERR_BZR_CRV_EXPECT,
  19.     SYMB_ERR_BZR_SRF_EXPECT,
  20.     SYMB_ERR_BSP_CRV_EXPECT,
  21.     SYMB_ERR_BSP_SRF_EXPECT,
  22.     SYMB_ERR_RATIONAL_EXPECTED,
  23.     SYMB_ERR_NO_CROSS_PROD,
  24.     SYMB_ERR_POWER_NO_SUPPORT,
  25.     SYMB_ERR_CRV_FAIL_CMPT,
  26.     SYMB_ERR_SRF_FAIL_CMPT,
  27.     SYMB_ERR_UNDEF_CRV,
  28.     SYMB_ERR_UNDEF_SRF,
  29.     SYMB_ERR_UNDEF_GEOM,
  30.     SYMB_ERR_OUT_OF_RANGE,
  31.     SYMB_ERR_DIR_NOT_CONST_UV,
  32.     SYMB_ERR_REPARAM_NOT_MONOTONE,
  33.     SYMB_ERR_BSPLINE_NO_SUPPORT,
  34.     SYMB_ERR_WRONG_PT_TYPE,
  35.     SYMB_ERR_ONLY_2D_OR_3D,
  36.     SYMB_ERR_RATIONAL_NO_SUPPORT,
  37.     SYMB_ERR_SRFS_INCOMPATIBLE,
  38.     SYMB_ERR_CRVS_INCOMPATIBLE,
  39.     SYMB_ERR_CANNOT_COMP_NORMAL,
  40.     SYMB_ERR_TOO_COMPLEX,
  41.     SYMB_ERR_UNSUPPORT_PT,
  42.     SYMB_ERR_W_NOT_SAME,
  43.     SYMB_ERR_SCALAR_EXPECTED,
  44.     SYMB_ERR_POLY_CONST_SRF,
  45.  
  46.     SYMB_ERR_UNDEFINE_ERR
  47. } SymbFatalErrorType;
  48.  
  49. typedef enum {
  50.     SYMB_SUBDIV_STRAT_ALTERNATE = 1,
  51.     SYMB_SUBDIV_STRAT_MIN_MAX,
  52.     SYMB_SUBDIV_STRAT_MIN_MIN
  53. } SymbPlSubdivStrategyType;
  54.  
  55. typedef struct SymbMultiResCrvStruct {
  56.     struct SymbMultiResCrvStruct *Pnext;
  57.     CagdCrvStruct **HieCrv;
  58.     int RefineLevel, Levels, Periodic;
  59. } SymbMultiResCrvStruct;
  60.  
  61. typedef CagdCrvStruct *(*SymbAdapIsoDistSqrFuncType)(int,
  62.                              CagdCrvStruct *,
  63.                              CagdCrvStruct *,
  64.                              CagdCrvStruct *,
  65.                              CagdCrvStruct *);
  66. typedef CagdRType (*SymbPlErrorFuncType)(CagdSrfStruct *Srf,
  67.                      CagdSrfDirType Dir);
  68. typedef CagdCrvStruct *(*SymbOffCrvFuncType)(CagdCrvStruct *Crv,
  69.                          CagdRType R,
  70.                          CagdBType B);
  71.  
  72. #if defined(__cplusplus) || defined(c_plusplus)
  73. extern "C" {
  74. #endif
  75.  
  76. /******************************************************************************
  77. * Routines to handle curves generically.                      *
  78. ******************************************************************************/
  79. CagdPolylineStruct *SymbCrv2Polyline(CagdCrvStruct *Crv,
  80.                      int SamplesPerCurve,
  81.                      CagdBType Optimal,
  82.                      CagdBType OptiLin);
  83. CagdCrvStruct *SymbCrvAdd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  84. CagdCrvStruct *SymbCrvSub(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  85. CagdCrvStruct *SymbCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  86. CagdCrvStruct *SymbCrvInvert(CagdCrvStruct *Crv);
  87. CagdCrvStruct *SymbCrvScalarScale(CagdCrvStruct *Crv, CagdRType Scale);
  88. CagdCrvStruct *SymbCrvDotProd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  89. CagdCrvStruct *SymbCrvMultScalar(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  90. CagdCrvStruct *SymbCrvCrossProd(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  91. CagdCrvStruct *SymbCrvRtnlMult(CagdCrvStruct *Crv1X,
  92.                    CagdCrvStruct *Crv1W,
  93.                    CagdCrvStruct *Crv2X,
  94.                    CagdCrvStruct *Crv2W,
  95.                    CagdBType OperationAdd);
  96. CagdCrvStruct *SymbCrvEnclosedArea(CagdCrvStruct *Crv);
  97. CagdCrvStruct *SymbCrv2DCurvatureSqr(CagdCrvStruct *Crv);
  98. CagdCrvStruct *SymbCrv3DCurvatureSqr(CagdCrvStruct *Crv);
  99. CagdCrvStruct *SymbCrv3DRadiusNormal(CagdCrvStruct *Crv);
  100. CagdCrvStruct *SymbCrv3DCurvatureNormal(CagdCrvStruct *Crv);
  101. CagdCrvStruct *SymbCrv2DCurvatureSign(CagdCrvStruct *Crv);
  102. CagdCrvStruct *SymbMakePosCrvCtlPolyPos(CagdCrvStruct *OrigCrv);
  103. CagdPtStruct *SymbCrv2DInflectionPts(CagdCrvStruct *Crv, CagdRType Epsilon);
  104. CagdPtStruct *SymbCrv2DExtremCrvtrPts(CagdCrvStruct *Crv, CagdRType Epsilon);
  105. void SymbCrvSplitScalar(CagdCrvStruct *Crv,
  106.             CagdCrvStruct **CrvW,
  107.             CagdCrvStruct **CrvX,
  108.             CagdCrvStruct **CrvY,
  109.             CagdCrvStruct **CrvZ);
  110. CagdCrvStruct *SymbCrvMergeScalar(CagdCrvStruct *CrvW,
  111.                   CagdCrvStruct *CrvX,
  112.                   CagdCrvStruct *CrvY,
  113.                   CagdCrvStruct *CrvZ);
  114. CagdCrvStruct *SymbLimitCrvArcLen(CagdCrvStruct *Crv, CagdRType MaxLen);
  115. CagdRType SymbCrvArcLenPoly(CagdCrvStruct *Crv);
  116. CagdCrvStruct *SymbCrvUnitLenScalar(CagdCrvStruct *OrigCrv,
  117.                     CagdBType Mult,
  118.                     CagdRType Epsilon);
  119. CagdCrvStruct *SymbCrvSqrtScalar(CagdCrvStruct *OrigCrv, CagdRType Epsilon);
  120. CagdCrvStruct *SymbCrvArcLenCrv(CagdCrvStruct *OrigCrv, CagdRType Epsilon);
  121. CagdRType SymbCrvArcLen(CagdCrvStruct *Crv, CagdRType Epsilon);
  122. CagdPtStruct *SymbCrvArcLenSteps(CagdCrvStruct *Crv,
  123.                  CagdRType Length,
  124.                  CagdRType Epsilon);
  125. CagdCrvStruct *SymbComposeCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  126. CagdCrvStruct *SymbComposeSrfCrv(CagdSrfStruct *Srf, CagdCrvStruct *Crv);
  127. CagdRType SymbDistCrvPoint(CagdCrvStruct *Crv,
  128.                CagdPType Pt,
  129.                CagdBType MinDist,
  130.                CagdRType Epsilon);
  131. CagdPtStruct *SymbLclDistCrvPoint(CagdCrvStruct *Crv,
  132.                   CagdPType Pt,
  133.                   CagdRType Epsilon);
  134. CagdRType SymbDistCrvLine(CagdCrvStruct *Crv,
  135.               CagdLType Line,
  136.               CagdBType MinDist,
  137.               CagdRType Epsilon);
  138. CagdPtStruct *SymbLclDistCrvLine(CagdCrvStruct *Crv,
  139.                  CagdLType Line,
  140.                  CagdRType Epsilon);
  141. CagdPtStruct *SymbCrvZeroSet(CagdCrvStruct *Crv, int Axis, CagdRType Epsilon);
  142. CagdPtStruct *SymbCrvExtremSet(CagdCrvStruct *Crv,
  143.                    int Axis,
  144.                    CagdRType Epsilon);
  145. CagdPtStruct *SymbCrvConstSet(CagdCrvStruct *Crv,
  146.                   int Axis,
  147.                   CagdRType Epsilon,
  148.                   CagdRType ConstVal);
  149. CagdBType SymbCrvPosNegWeights(CagdCrvStruct *Crv);
  150. CagdCrvStruct *SymbCrvOffset(CagdCrvStruct *Crv,
  151.                  CagdRType OffsetDist,
  152.                  CagdBType BezInterp);
  153. CagdCrvStruct *SymbCrvSubdivOffset(CagdCrvStruct *Crv,
  154.                    CagdRType OffsetDist,
  155.                    CagdRType Tolerance,
  156.                    CagdBType BezInterp);
  157. CagdCrvStruct *SymbCrvAdapOffset(CagdCrvStruct *OrigCrv,
  158.                  CagdRType OffsetDist,
  159.                  CagdRType OffsetError,
  160.                  SymbOffCrvFuncType OffsetAprxFunc,
  161.                  CagdBType BezInterp);
  162. CagdCrvStruct *SymbCrvAdapOffsetTrim(CagdCrvStruct *OrigCrv,
  163.                      CagdRType OffsetDist,
  164.                      CagdRType OffsetError,
  165.                      SymbOffCrvFuncType OffsetAprxFunc,
  166.                      CagdBType BezInterp);
  167. CagdCrvStruct *SymbCrvLeastSquarOffset(CagdCrvStruct *Crv,
  168.                        CagdRType OffsetDist,
  169.                        int NumOfSamples,
  170.                        int NumOfDOF,
  171.                        int Order,
  172.                        CagdRType *Tolerance);
  173.  
  174. /******************************************************************************
  175. * Routines to handle surfaces generically.                      *
  176. ******************************************************************************/
  177. CagdPolygonStruct *SymbSrf2Polygons(CagdSrfStruct *Srf,
  178.                     int FineNess,
  179.                     CagdBType ComputeNormals,
  180.                     CagdBType FourPerFlat,
  181.                     CagdBType ComputeUV);
  182. CagdPolylineStruct *SymbSrf2Polylines(CagdSrfStruct *Srf,
  183.                       int NumOfIsocurves[2],
  184.                       int SamplesPerCurve,
  185.                       int Optimal);
  186. CagdCrvStruct *SymbSrf2Curves(CagdSrfStruct *Srf, int NumOfIsocurves[2]);
  187. CagdSrfStruct *SymbSrfAdd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  188. CagdSrfStruct *SymbSrfSub(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  189. CagdSrfStruct *SymbSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  190. CagdSrfStruct *SymbSrfInvert(CagdSrfStruct *Srf);
  191. CagdSrfStruct *SymbSrfScalarScale(CagdSrfStruct *Srf, CagdRType Scale);
  192. CagdSrfStruct *SymbSrfDotProd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  193. CagdSrfStruct *SymbSrfCrossProd(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  194. CagdSrfStruct *SymbSrfRtnlMult(CagdSrfStruct *Srf1X,
  195.                    CagdSrfStruct *Srf1W,
  196.                    CagdSrfStruct *Srf2X,
  197.                    CagdSrfStruct *Srf2W,
  198.                    CagdBType OperationAdd);
  199. CagdSrfStruct *SymbSrfNormalSrf(CagdSrfStruct *Srf);
  200. void SymbMeshAddSub(CagdRType **DestPoints,
  201.             CagdRType **Points1,
  202.             CagdRType **Points2,
  203.             CagdPointType PType,
  204.             int Size,
  205.             CagdBType OperationAdd);
  206. void SymbSrfSplitScalar(CagdSrfStruct *Srf,
  207.             CagdSrfStruct **SrfW,
  208.             CagdSrfStruct **SrfX,
  209.             CagdSrfStruct **SrfY,
  210.             CagdSrfStruct **SrfZ);
  211. CagdSrfStruct *SymbSrfMergeScalar(CagdSrfStruct *SrfW,
  212.                   CagdSrfStruct *SrfX,
  213.                   CagdSrfStruct *SrfY,
  214.                   CagdSrfStruct *SrfZ);
  215. CagdCrvStruct *SymbPrmtSclrCrvTo2D(CagdCrvStruct *Crv,
  216.                    CagdRType Min,
  217.                    CagdRType Max);
  218. CagdSrfStruct *SymbPrmtSclrSrfTo3D(CagdSrfStruct *Srf,
  219.                    CagdRType UMin, CagdRType UMax,
  220.                    CagdRType VMin, CagdRType VMax);
  221. CagdRType *SymbExtremumCntPtVals(CagdRType **Points,
  222.                  int Length,
  223.                  CagdBType FindMinimum);
  224. void SymbSetAdapIsoExtractMinLevel(int MinLevel);
  225. CagdCrvStruct *SymbAdapIsoExtract(CagdSrfStruct *Srf,
  226.                   CagdSrfStruct *NSrf,
  227.                   SymbAdapIsoDistSqrFuncType AdapIsoDistFunc,
  228.                   CagdSrfDirType Dir,
  229.                   CagdRType Eps,
  230.                   CagdBType FullIso,
  231.                   CagdBType SinglePath);
  232. CagdSrfStruct *SymbAllPrisaSrfs(CagdSrfStruct *Srfs,
  233.                 int SamplesPerCurve,
  234.                 CagdRType Epsilon,
  235.                 CagdSrfDirType Dir,
  236.                 CagdVType Space);
  237. CagdSrfStruct *SymbPiecewiseRuledSrfApprox(CagdSrfStruct *Srf,
  238.                        CagdBType ConsistentDir,
  239.                        CagdRType Epsilon,
  240.                        CagdSrfDirType Dir);
  241. CagdSrfStruct *SymbPrisaRuledSrf(CagdSrfStruct *Srf,
  242.                  int SamplesPerCurve,
  243.                  CagdRType Space,
  244.                  CagdVType Offset);
  245. void SymbSrfFff(CagdSrfStruct *Srf,
  246.         CagdSrfStruct **DuSrf,
  247.         CagdSrfStruct **DvSrf,
  248.         CagdSrfStruct **FffG11,
  249.         CagdSrfStruct **FffG12,
  250.         CagdSrfStruct **FffG22);
  251. void SymbSrfSff(CagdSrfStruct *DuSrf,
  252.         CagdSrfStruct *DvSrf,
  253.         CagdSrfStruct **SffL11,
  254.         CagdSrfStruct **SffL12,
  255.         CagdSrfStruct **SffL22,
  256.         CagdSrfStruct **SNormal);
  257. CagdSrfStruct *SymbSrf2DDeterminant(CagdSrfStruct *Srf11,
  258.                     CagdSrfStruct *Srf12,
  259.                     CagdSrfStruct *Srf21,
  260.                     CagdSrfStruct *Srf22);
  261. CagdSrfStruct *SymbSrfCurvatureUpperBound(CagdSrfStruct *Srf);
  262. CagdSrfStruct *SymbSrfIsoDirNormalCurvatureBound(CagdSrfStruct *Srf,
  263.                          CagdSrfDirType Dir);
  264. CagdSrfStruct *SymbSrfDistCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  265. CagdPtStruct *SymbSrfDistFindPoints(CagdSrfStruct *Srf,
  266.                     CagdRType Epsilon,
  267.                     CagdBType SelfInter);
  268. CagdCrvStruct *SymbTwoCrvsMorphing(CagdCrvStruct *Crv1,
  269.                    CagdCrvStruct *Crv2,
  270.                    CagdRType Blend);
  271. CagdCrvStruct *SymbTwoCrvsMorphingCornerCut(CagdCrvStruct *Crv1,
  272.                         CagdCrvStruct *Crv2,
  273.                         CagdRType MinDist,
  274.                         CagdBType SameLength,
  275.                         CagdBType FilterTangencies);
  276. CagdCrvStruct *SymbTwoCrvsMorphingMultiRes(CagdCrvStruct *Crv1,
  277.                        CagdCrvStruct *Crv2,
  278.                        CagdRType BlendStep);
  279. CagdSrfStruct *SymbTwoSrfsMorphing(CagdSrfStruct *Srf1,
  280.                    CagdSrfStruct *Srf2,
  281.                    CagdRType Blend);
  282. void SymbSrf2OptPolysCurvatureErrorPrep(CagdSrfStruct *Srf);
  283. void SymbSrf2OptPolysIsoDirCurvatureErrorPrep(CagdSrfStruct *Srf);
  284. CagdRType SymbSrf2OptPolysCurvatureError(CagdSrfStruct *Srf,
  285.                      CagdSrfDirType Dir);
  286. CagdRType SymbSrf2OptPolysBilinPolyError(CagdSrfStruct *Srf,
  287.                      CagdSrfDirType Dir);
  288. CagdPolygonStruct *SymbSrf2OptimalPolygons(CagdSrfStruct *Srf,
  289.                 CagdRType Tolerance,
  290.                 SymbPlSubdivStrategyType SubdivDirStrategy,
  291.                 SymbPlErrorFuncType SrfPolyApproxErr,
  292.                 CagdBType ComputeNormals,
  293.                 CagdBType FourPerFlat,
  294.                 CagdBType ComputeUV);
  295. CagdSrfStruct *SymbSrfOffset(CagdSrfStruct *Srf, CagdRType OffsetDist);
  296. CagdSrfStruct *SymbSrfSubdivOffset(CagdSrfStruct *Srf,
  297.                    CagdRType OffsetDist,
  298.                    CagdRType Tolerance);
  299.  
  300. /******************************************************************************
  301. * Routines to handle Bezier curves.                          *
  302. ******************************************************************************/
  303. CagdCrvStruct *BzrCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  304. CagdCrvStruct *BzrCrvMultList(CagdCrvStruct *Crv1Lst, CagdCrvStruct *Crv2Lst);
  305. CagdCrvStruct *BzrCrvDeriveRational(CagdCrvStruct *Crv);
  306. CagdCrvStruct *BzrApproxBzrCrvAsCubics(CagdCrvStruct *Crv,
  307.                        CagdRType Tol,
  308.                        CagdRType MaxLen,
  309.                        CagdBType NoRational);
  310. CagdCrvStruct *BzrApproxBzrCrvAsCubicPoly(CagdCrvStruct *Crv, CagdRType Tol2);
  311. CagdCrvStruct *BzrComposeCrvCrv(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  312. CagdCrvStruct *BzrComposeSrfCrv(CagdSrfStruct *Srf, CagdCrvStruct *Crv);
  313.  
  314. /******************************************************************************
  315. * Routines to handle Bezier surfaces.                          *
  316. ******************************************************************************/
  317. CagdSrfStruct *BzrSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  318. CagdSrfStruct *BzrSrfDeriveRational(CagdSrfStruct *Srf, CagdSrfDirType Dir);
  319.  
  320. /******************************************************************************
  321. * Routines to handle Bspline curves.                          *
  322. ******************************************************************************/
  323. int BspMultInterpFlag(int BspMultUsingInter);
  324. CagdCrvStruct *BspCrvMult(CagdCrvStruct *Crv1, CagdCrvStruct *Crv2);
  325. CagdCrvStruct *BspCrvDeriveRational(CagdCrvStruct *Crv);
  326.  
  327. /******************************************************************************
  328. * Routines to handle Multi Resolution Bspline curves.                         *
  329. ******************************************************************************/
  330. SymbMultiResCrvStruct *SymbCrvMultiResDecomp(CagdCrvStruct *Crv, int Discont);
  331. CagdCrvStruct *SymbCrvMultiResCompos(SymbMultiResCrvStruct *MRCrv);
  332. CagdCrvStruct *SymbCrvMultiResComposAtT(SymbMultiResCrvStruct *MRCrv,
  333.                     CagdRType T);
  334. void SymbCrvMultiResEdit(SymbMultiResCrvStruct *MRCrv,
  335.              CagdRType t,
  336.              CagdVType TransDir,
  337.              CagdRType Level,
  338.              CagdRType FracLevel);
  339. CagdRType *SymbCrvMultiResRefineLevel(SymbMultiResCrvStruct *MRCrv,
  340.                       CagdRType T,
  341.                       int SpanDiscont);
  342. void SymbCrvMultiResFree(SymbMultiResCrvStruct *MRCrv);
  343. SymbMultiResCrvStruct *SymbCrvMultiResNew(int Levels, CagdBType Periodic);
  344. SymbMultiResCrvStruct *SymbCrvMultiResCopy(SymbMultiResCrvStruct *MRCrvOrig);
  345.  
  346. /******************************************************************************
  347. * Routines to handle Bspline surfaces.                          *
  348. ******************************************************************************/
  349. CagdSrfStruct *BspSrfMult(CagdSrfStruct *Srf1, CagdSrfStruct *Srf2);
  350. CagdSrfStruct *BspSrfDeriveRational(CagdSrfStruct *Srf, CagdSrfDirType Dir);
  351.  
  352. /******************************************************************************
  353. * Error handling.                                  *
  354. ******************************************************************************/
  355. char *SymbDescribeError(SymbFatalErrorType ErrorNum);
  356. void SymbFatalError(SymbFatalErrorType ErrID);
  357.  
  358. #if defined(__cplusplus) || defined(c_plusplus)
  359. }
  360. #endif
  361.  
  362. #endif /* SYMB_LIB_H */
  363.